package com.h3c.nem.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.eos.common.util.Result;
import com.github.pagehelper.PageInfo;
import com.h3c.nem.dto.*;
import com.h3c.nem.dto.beisen.OcrDTO;
import com.h3c.nem.dto.sap.SubmitFormalWorkerIdDTO;
import com.h3c.nem.entity.TbOfferWorker;
import com.h3c.nem.vo.TbOfferWorkerVO;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * 预备员工基本信息接口类
 *
 * @author chenyifan
 * @since 2022-06-02 14:19:48
 */
public interface ITbOfferWorkerService extends IService<TbOfferWorker> {

    /**
     * 根据手机号获取未入职的预备员工信息
     *
     * @param phoneNum
     * @return
     */
    TbOfferWorker getOneByPhoneNo(String phoneNum);

    /**
     * 根据证件号获取未入职的预备员工信息
     *
     * @param certNo
     * @return
     */
    TbOfferWorker getOneByCertNo(String certNo);

    /**
     * 保存基本信息
     *
     * @param workerDTO
     */
    void saveBasicInfo(TbOfferWorkerDTO workerDTO);

    /**
     * 修改入职日期
     * @param workerId
     * @param updateEntryDateDTO
     */
    void updateEntryDate(String workerId, UpdateEntryDateDTO updateEntryDateDTO);

    /**
     * 回显基本信息
     *
     * @return
     */
    TbOfferWorkerVO showBasicInfo();

    /**
     * 录入信息完成提交接口
     */
    String finishFill();

    /**
     * bp获取预备员工分页信息
     *
     * @param dto       预备员工信息
     * @param startDate 预备入职时间-开始
     * @param endDate   -结束
     * @return 预备员工分页信息
     */
    List<TbOfferWorkerDTO> getOfferWorkerBp(TbOfferWorkerDTO dto, String startDate, String endDate, Boolean isBp);
    PageInfo<TbOfferWorkerDTO> getOfferWorkerBp(TbOfferWorkerDTO dto, String startDate, String endDate, Boolean isBp,
                                            Integer currentPage, Integer pageSize);

    /**
     * 搜索框 支持预备员工查询
     *
     * @param keyword 查询内容
     * @return
     */
    List<TbOfferWorker> searchWorker(String keyword);

    /**
     * 获取预备员工各个数量
     *
     * @return
     */
    List<JSONObject> getWorkerStatusCount(Boolean isBp);

    /**
     * 获取预备员工详情
     *
     * @param workerId
     * @return
     */
    Map<String, Object> getWorkerDetail(String workerId);

    /**
     * 提交offer调整
     *
     * @param offerAdjustDTO offer调整信息
     * @return success|成功
     */
    String submitOfferAdjust(OfferAdjustDTO offerAdjustDTO);

    /**
     * 获取Offer调整页信息
     *
     * @param workerId 预备员工工号
     * @return
     */
    JSONObject getOfferAdjust(String workerId, String recordId);

    /**
     * 员工填写有问题发送反馈邮件
     * @param content
     */
    public void sendHelpMsgWhenSubmit(String content, String type);

    /**
     * 能否编辑北森数据
     * @param workerId
     * @param auth
     */
    public void updateEditBeisenAuth(String workerId, String auth);

    /**
     * 确认一些文件
     */
    void confirmFile();

    /**
     * 审核预备员工资料
     *
     * @param workerId     工号
     * @param approvalType 审核类型  1:通过 2：驳回 4:取消入职
     * @return
     */
    String approvalOfferWorkerData(String workerId, String approvalNote, Integer approvalType, String copyEmail, String sendMailFlag);

    /**
     * 批量审核
     * @param workerIds 工号
     * @param approvalNote 审核内容
     * @param approvalType 审核类型
     * @param copyEmail 抄送
     * @return
     */
    String batchApprovalOfferWorkerData(String workerIds, String approvalNote, Integer approvalType, String copyEmail);

    /**
     * 发起电子签署
     *
     * @param workerIds
     * @return
     */
    String startElectronicSignature(List<String> workerIds);

    /**
     * 生成正式工号
     * @param submitFormalWorkerIdDTO
     * @return
     */
    String submitOfGenFormalWorkerId(SubmitFormalWorkerIdDTO submitFormalWorkerIdDTO);

    /**
     * 生成域账号
     *
     * @param offerWorker
     * @return
     */
//    void genAccountDomain(TbOfferWorker offerWorker);

    /**
     * 根据ocr识别的身份证上的信息更新
     *
     * @param ocrDTO ocr识别到的信息
     */
    void updateUserInfoByOCR(OcrDTO ocrDTO);

    /**
     * 编辑待入职员工
     * @param dto
     * @return
     */
    String editPendingEmployees(OfferWorkerEditDTO dto);

    /**
     * 编辑预备员工
     * @param dto
     * @return
     */
    String editOfferWorker(OfferWorkerEditDTO dto);

    /**
     * 批量生成正式工号
     * @param submitFormalWorkerIdDTO
     * @return
     */
    String batchSubmitOfGenFormalWorkerId(SubmitFormalWorkerIdDTO submitFormalWorkerIdDTO);

    /**
     * 部门是否是研发   主管放默认值
     * @param deptNameChain
     * @return
     */
    JSONObject checkRdDeptTypeAndManager(String deptNameChain);
    /**
     * 您好，您部门的员工【部门、姓名】【联系方式（手机号）】（如有多人，请合并），预计于今日XX年XX月XX日（星期X）入职报道。详细信息可点击链接进入系统查看（如有多人，请合并）
     * 发送时间：于入职前一天（按工作日历看）定点发送（9点）
     * 定时发送第二天入职人员名单
     */
    void mailToLeaderBeforeJoin();
    /**
     * "有未报到人员，给主管推送
     * 您好，您部门的员工【部门、姓名】【联系方式（手机号）】（如有多人，请合并），今日未完成报到。
     * 详细信息可点击链接进入系统查看（如有多人，请合并）
     * 发送时间：入职当天定点发送（17:00点）
     * 未报到状态认定：未生成工号（17:00点）"
     */
    void mailToLeaderWhenJoin();

    /**
     * SSC更新预备员工计划入职日期
     * @param editDTO
     */
    public void sscUpdatePlanReportDate(OfferWorkerEditDTO editDTO);
    /**
     * 邮催
     */
    void postalReminder(String workerIds);

    void offerWorkerWillJoinJob(String s);

    /**
     * 人工确认电子签署完成
     * @param workerId
     */
    void confirmEsign(String workerId);

    /**
     * 重新发起电子签署
     * @param reSignDTOS
     * @param appId
     * @param sceneType
     * @return
     */
    String reSignFile(List<ReSignDTO> reSignDTOS, String appId, Integer sceneType);

    void approvalPlanReportDate(OfferWorkerEditDTO dto);

    List<OfferWorkerEditDTO> lessCodeEditInformation(List<OfferWorkerEditDTO> workerEditDTOList, Result<String> result);

    void genAccountDomain(TbOfferWorker offerWorker);

    /**
     * 邮件拒绝offer接口
     * @param workerId
     * @param response
     */
    void refuseOffer(String workerId, HttpServletResponse response);

    /**
     * 邮件接受offer接口
     * @param workerId
     * @param response
     */
    void acceptOffer(String workerId, HttpServletResponse response);

    void setDeptName(TbOfferWorker worker);
    void updateOfferWorkerToSap(String workerId);
}

